<?php
class PasarelasController extends AppController {

	var $name = 'Pasarelas';
	var $components = array('Email'); //  use component email 
	var $uses = array('Ipn','Payment','Plan');
    var $helpers = array('Xml');


    function beforeFilter () {
        parent::beforeFilter();
		$this->Auth->allow('mercadopago','resultado');

		// Aplico el Layout segun la Vista o si es AJAX
		if ($this->RequestHandler->isAjax()) {
			$this->layout = 'ajax';
		}else{
			// Cambio la Vista por la del Rol
			$this->layout = strtolower($this->Session->read('VistaActual'));
		}
    }

    function resultado($status = '', $extra_part='') {
    	 // $status = succesfull | process | cancel
    	// $extra_part =  $payment_id.'-'.$client_id.'-'.$pago['plan_id'].'-'.$clave.'-'.time();
		$xplode = explode('-', $extra_part);
/*
		$id        = $xplode[0];
		$client_id = $xplode[1];
		$plan_id   = $xplode[2];
		$ano       = $xplode[3];
		$mes       = $xplode[4];
		$fecha_op  = $xplode[5];
*/
    	$this->set('status',$status);
    	$this->set('xplode',$xplode);
    }

    function mercadopago(){

		$this->autoRender=false;

    	$topic = $_GET['topic']; // payment
    	$mp_op_id = $_GET['id'];

    	// Obtener Token
		$mp_client_id     = '13103';
		$mp_client_secret = '07mGvmOJuadpsWsz499GyDtg8gyaDBnK';
		$data [] = 'grant_type=client_credentials';
		$data [] = 'client_id=' . $mp_client_id;	
		$data [] = 'client_secret=' . $mp_client_secret;

		$qs = implode ( '&', $data );

		$url = 'https://api.mercadolibre.com/oauth/token';

		// Inicio CuRL para  obtener los datos via POST
		$handler = curl_init ();
		curl_setopt ( $handler, CURLOPT_URL, $url );
		curl_setopt ( $handler, CURLOPT_POST, true );
		curl_setopt ( $handler, CURLOPT_POSTFIELDS, $qs );
		curl_setopt ( $handler, CURLOPT_RETURNTRANSFER, true );
		$response = curl_exec ( $handler );
		$result   = array ('response' => $response, 'data' => curl_getinfo ( $handler ) );
		curl_close ( $handler );


		if (!empty($result['response'])) {
			$j_response = json_decode( $result['response'] );
			$Token      = $j_response->access_token;

			$datos = file_get_contents("https://api.mercadolibre.com/collections/$mp_op_id?access_token=$Token");

			if(!empty($datos)) {

				//-- Mas datos en: https://developers.mercadopago.com/api-ipn#update

				$j_datos = json_decode($datos);
				$external_reference = $j_datos->external_reference; //11-2-2012-07-1348059706
				$transaction_amount = $j_datos->transaction_amount;
				$status             = $j_datos->status;
				$status_detail      = $j_datos->status_detail;
				$payment_type       = $j_datos->payment_type;
				$operation_type     = $j_datos->operation_type;

				$xplode = explode('-', $external_reference);
				$id        = $xplode[0];
				$client_id = $xplode[1];
				$plan_id   = $xplode[2];
				$ano       = $xplode[3];
				$mes       = $xplode[4];
				$fecha_op  = $xplode[5];

				//-- Guardo el estado de la consulta IPN	
				$ipn['id']         = 0;
				$ipn['client_id']  = $client_id;
				$ipn['plan_id']    = $plan_id;
				$ipn['periodo']    = $ano.'-'.$mes;
				$ipn['fecha_pago'] = $fecha_op;
				$ipn['fecha_ipn']  = time();
				$ipn['mp_op_id']   = $mp_op_id;
				$ipn['importe']    = $transaction_amount;
				$ipn['status']     = $status;
				$ipn['datos']      = $datos;
				$this->Ipn->save($ipn);

				$Plan = $this->Plan->read(null,$plan_id);

				if ($status=='approved') {
					/*
					Tipo de Status
					approved: Pago acreditado.
					cancelled: Pago cancelado.
					in_mediation: El pago entró en disputa. 
					in_process: El pago está pendiente de acreditación. 
					pending: Pago pendiente, aún no se realizó. 
					refunded: Pago reintegrado a la contraparte.
					rejected: Pago rechazado.
					uninitialized: Se abandonó el pago en el medio del proceso.
					*/

					$payment['id']               = $id;
					$payment['fecha_pago']       = date("Y",$fecha_op).'-'.date("m",$fecha_op).'-'.date("d",$fecha_op);
					$payment['importe_cobrado']  = $transaction_amount;
					$payment['paymentmethod_id'] = 1;
					$this->Payment->save($payment);
				}	

				// No se pudo obtener el estado de la operacion
				$texto = date("Y/m/d H:i")." - $topic - $mp_op_id - $status";
				$this->_grabo_log($texto);



			} else {
				// No se pudo obtener el estado de la operacion
				$texto = date("Y/m/d H:i")." - $topic - $mp_op_id - No se pudo obtener el estado de la operacion.";
				$this->_grabo_log($texto);

			}



		} else {
			// No se pudo obtener el Token
			$texto = date("Y/m/d H:i")." - $topic - $mp_op_id - No se pudo obtener el Token.";
			$this->_grabo_log($texto);
		}

	} //end function




	function _grabo_log($texto){
/*		
		$fp = fopen('/webroot/files/resultado_mercadopago.txt', 'a+');
		fwrite($fp, "$texto\n");
		fclose($fp);
*/
	}

}
?>